Standard C Library এর মাধ্যমে ডেটা স্ট্রাকচার

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Data Structure Libraries (ডেটা স্ট্রাকচার লাইব্রেরি) |
204
204

Standard C Library এর মাধ্যমে ডেটা স্ট্রাকচার

সি প্রোগ্রামিং ভাষায় স্ট্যান্ডার্ড লাইব্রেরি সরাসরি কোনো জটিল ডেটা স্ট্রাকচার প্রদান করে না। তবে স্ট্যান্ডার্ড সি লাইব্রেরির বিভিন্ন ফাংশন এবং ডেটা টাইপ ব্যবহার করে সহজ কিছু ডেটা স্ট্রাকচার তৈরি করা যায়। কিছু সাধারণ ডেটা স্ট্রাকচার, যেমন স্ট্যাক, কিউ, লিঙ্কড লিস্ট ইত্যাদি, স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলো ব্যবহার করে তৈরি করা সম্ভব।


ডেটা স্ট্রাকচার তৈরিতে ব্যবহৃত Standard C Library Components

স্ট্যান্ডার্ড সি লাইব্রেরিতে কিছু গুরুত্বপূর্ণ হেডার ফাইল রয়েছে, যেগুলো ডেটা স্ট্রাকচার তৈরিতে সহায়ক। কিছু গুরুত্বপূর্ণ হেডার ফাইল হলো:

  1. stdlib.h – ডাইনামিক মেমোরি অ্যালোকেশন এবং ইউটিলিটি ফাংশনের জন্য।
  2. stdio.h – ইনপুট/আউটপুট অপারেশনের জন্য।
  3. string.h – স্ট্রিং পরিচালনার জন্য ফাংশন সরবরাহ করে।
  4. stdbool.hbool ডেটা টাইপের জন্য (যা স্ট্যাক এবং কিউ এর মতো ডেটা স্ট্রাকচারের লজিক্যাল অপারেশনে সহায়ক)।

স্ট্যাক (Stack)

স্ট্যাক হলো একটি লাস্ট ইন, ফার্স্ট আউট (LIFO) ডেটা স্ট্রাকচার। এতে সর্বশেষে সংযুক্ত ডেটা প্রথমে অপসারিত হয়। সি প্রোগ্রামিংয়ে স্ট্যাকের জন্য সাধারণত একটি এরে বা লিঙ্কড লিস্ট ব্যবহার করা হয়।

উদাহরণ: এরে ব্যবহার করে স্ট্যাক বাস্তবায়ন

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX 10
int stack[MAX];
int top = -1;

bool isFull() {
    return top == MAX - 1;
}

bool isEmpty() {
    return top == -1;
}

void push(int value) {
    if (isFull()) {
        printf("Stack overflow\n");
    } else {
        stack[++top] = value;
        printf("Pushed %d to stack\n", value);
    }
}

int pop() {
    if (isEmpty()) {
        printf("Stack underflow\n");
        return -1;
    } else {
        return stack[top--];
    }
}

int main() {
    push(5);
    push(10);
    printf("Popped: %d\n", pop());
    printf("Popped: %d\n", pop());
    return 0;
}

কিউ (Queue)

কিউ হলো একটি ফার্স্ট ইন, ফার্স্ট আউট (FIFO) ডেটা স্ট্রাকচার। এতে প্রথমে সংযুক্ত ডেটা প্রথমে অপসারিত হয়।

উদাহরণ: এরে ব্যবহার করে কিউ বাস্তবায়ন

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX 10
int queue[MAX];
int front = -1, rear = -1;

bool isFull() {
    return rear == MAX - 1;
}

bool isEmpty() {
    return front == -1 || front > rear;
}

void enqueue(int value) {
    if (isFull()) {
        printf("Queue overflow\n");
    } else {
        if (front == -1) front = 0;
        queue[++rear] = value;
        printf("Enqueued %d to queue\n", value);
    }
}

int dequeue() {
    if (isEmpty()) {
        printf("Queue underflow\n");
        return -1;
    } else {
        return queue[front++];
    }
}

int main() {
    enqueue(5);
    enqueue(10);
    printf("Dequeued: %d\n", dequeue());
    printf("Dequeued: %d\n", dequeue());
    return 0;
}

লিঙ্কড লিস্ট (Linked List)

লিঙ্কড লিস্ট হলো একটি ডেটা স্ট্রাকচার যেখানে প্রতিটি এলিমেন্ট একটি নোড হিসেবে থাকে এবং প্রতিটি নোডে ডেটা এবং পরবর্তী নোডের ঠিকানা থাকে।

উদাহরণ: সিঙ্গেল লিঙ্কড লিস্ট বাস্তবায়ন

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node* next;
};

// নতুন নোড তৈরি
struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

// লিঙ্কড লিস্টে একটি নতুন নোড যোগ করা
void append(struct Node** head, int data) {
    struct Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        struct Node* temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}

// লিঙ্কড লিস্ট প্রিন্ট করা
void printList(struct Node* head) {
    struct Node* temp = head;
    while (temp != NULL) {
        printf("%d -> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}

int main() {
    struct Node* head = NULL;

    append(&head, 5);
    append(&head, 10);
    append(&head, 15);

    printList(head);

    return 0;
}

ডাবল লিঙ্কড লিস্ট (Doubly Linked List)

ডাবল লিঙ্কড লিস্টে প্রতিটি নোডে দুটি পয়েন্টার থাকে: একটি পরবর্তী নোডের দিকে নির্দেশ করে এবং অপরটি পূর্ববর্তী নোডের দিকে নির্দেশ করে।

উদাহরণ: ডাবল লিঙ্কড লিস্ট বাস্তবায়ন

#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node* next;
    struct Node* prev;
};

// নতুন নোড তৈরি
struct Node* createNode(int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = NULL;
    newNode->prev = NULL;
    return newNode;
}

// ডাবল লিঙ্কড লিস্টে নোড যোগ করা
void append(struct Node** head, int data) {
    struct Node* newNode = createNode(data);
    if (*head == NULL) {
        *head = newNode;
    } else {
        struct Node* temp = *head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
        newNode->prev = temp;
    }
}

// ডাবল লিঙ্কড লিস্ট প্রিন্ট করা
void printList(struct Node* head) {
    struct Node* temp = head;
    while (temp != NULL) {
        printf("%d <-> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}

int main() {
    struct Node* head = NULL;

    append(&head, 5);
    append(&head, 10);
    append(&head, 15);

    printList(head);

    return 0;
}

সারসংক্ষেপ

স্ট্যান্ডার্ড সি লাইব্রেরি সরাসরি কোন ডেটা স্ট্রাকচার প্রদান না করলেও stdlib.h এবং stdio.h এর ফাংশন এবং ডাইনামিক মেমোরি অ্যালোকেশন ব্যবহার করে স্ট্যাক, কিউ, লিঙ্কড লিস্ট এবং ডাবল লিঙ্কড লিস্টের মতো ডেটা স্ট্রাকচার তৈরি করা যায়।

এই ডেটা স্ট্রাকচারগুলো ব্যবহার করে প্রোগ্রামে বিভিন্ন প্রকারের ডেটা ম্যানেজমেন্ট করা সহজ হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion